// import com.alibaba.druid.sql.ast.SQLExpr_ptr;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr_ptr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"

class SQLAnalyzeTableStatement : virtual public SQLStatementImpl
{
  public:
  SQLExprTableSource_list_ptr tableSources;

  SQLPartitionRef_ptr partition;
  BOOL_ptr forColums;
  SQLName_list_ptr columns;
  BOOL_ptr cacheMetadata;
  BOOL_ptr noscan;
  BOOL_ptr computeStatistics;

  SQLIdentifierExpr_ptr adbSchema;            // for ADB
  SQLIdentifierExpr_list_ptr adbColumns;      // for ADB
  SQLIdentifierExpr_list_ptr adbColumnsGroup; // for ADB
  SQLExpr_ptr adbWhere;                       // for ADB

  SQLAnalyzeTableStatement();
  SHAREDOBJECT(SQLAnalyzeTableStatement);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  SQLExprTableSource_list_ptr getTables();

  SQLExprTableSource_ptr getTable();

  SQLName_list_ptr getColumns();

  void setTable(SQLExprTableSource_ptr table);

  SQLIdentifierExpr_ptr getAdbSchema();

  void setAdbSchema(SQLIdentifierExpr_ptr adbSchema);

  SQLIdentifierExpr_list_ptr getAdbColumns();

  void setAdbColumns(SQLIdentifierExpr_list_ptr adbColumns);

  SQLIdentifierExpr_list_ptr getAdbColumnsGroup();

  void setAdbColumnsGroup(SQLIdentifierExpr_list_ptr adbColumnsGroup);

  SQLExpr_ptr getAdbWhere();

  void setAdbWhere(SQLExpr_ptr adbWhere);

  void setTable(SQLName_ptr table);

  SQLPartitionRef_ptr getPartition();

  void setPartition(SQLPartitionRef_ptr x);

  BOOL_ptr isForColums();

  void setForColums(BOOL_ptr forColums);

  BOOL_ptr isCacheMetadata();

  void setCacheMetadata(BOOL_ptr cacheMetadata);

  BOOL_ptr isNoscan();

  void setNoscan(BOOL_ptr noscan);

  BOOL_ptr isComputeStatistics();

  void setComputeStatistics(BOOL_ptr computeStatistics);
};
